// const express = require("express");
// const http = require("http");
// const app = express(); // 创建一个express应用
// // app实际是一个函数,用于处理请求的函数
// const server = http.createServer(app);

// server.listen(9527, () => {
//   console.log("server, listen on 9527");
// });

// =====================
// 第二方式
console.log(process.env.NODE_ENV);
const express = require("express");
const { hostname } = require("os");
const app = express();
const path = require("path");
const staticRoot = path.resolve(__dirname, "./public");
// express.json 中间件
(function () {
  return;
  app.use(express.json());
})();

// express.urlencoded 中间件
(function () {
  return;
  app.use(
    express.urlencoded({
      extended: "qs",
    })
  );
  // application/x-www-from-urlencoded 直接变成解析,
  app.post("/api/student", (req, res) => {
    console.log("res==>", req.body);
    res.send("jieshule");
    res.end();
  });
})();

//static静态资源中间件
(function () {
  // return
  /**
   * 当请求时,会根据请求的路径(req.path),从指定的目录中寻找是否存在该文件
   * 如果存在,直接响应文件内容,而不再移交
   *
   * 如果不存在文件,则直接移交给后续的中间件处理
   */
  app.use(express.static(staticRoot));
  // app.use("/static", express.static(staticRoot));
})();

// 配置一个请求映射,如果请求方法和请求路径均满足匹配,交给处理函数进行处理
// app.请求方法("请求方法",处理函数)
app.listen(9527, () => {
  console.log("server, listen on 9527");
});

// 默认中间件

(function () {
  return;
  app.get(
    "/abc/:id",
    (req, res, next) => {
      // req和res是被express封装过的对象
      console.log(req.headers["host"]); // 获取请求头,
      console.log(req.path); // 获取请求路径,
      console.log(req.query); // 获取请求参数,
      console.log(req.params); // 获取动态路由,

      // ===============
      // throw new Error("abj");
      // 相当于next(new Error("abj"))
      // 会自动寻找后续的错误中间件
      // =============

      // 响应
      //   res.send([1, 2, 3]);
      //   res.setHeader("a", "123");
      //   res.setHeader("proxy-id", "123");
      //   res.send([1, 2, 3]);

      // 调试重定向
      //   res.status(302).header("location", "https://www.baidu.com").end();
      // 简化版本
      //   res.status(302).location("http://www.baidu.com").end();
      // 更简化版本
      //   res.redirect("http://www.baidu.com", 302);

      // 手动交给后面的中间件
      next();
    },
    (req, res, next) => {
      console.log("我是第二个中间件");
      // res.send("结束了");
      next();
    }
  );
})();
